package com.example.mall.query;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel(description = "分页查询")
public class PageQuery {
    @ApiModelProperty(value = "页码")
    private Integer pageNo = 1;
    @ApiModelProperty(value = "条数")
    private Integer pageSize = 10;
    @ApiModelProperty(value = "排序字段")
    private String sortBy;
    @ApiModelProperty(value = "是否升序")
    private Boolean isAsc = true;

    /**
     * 根据不通的排序条件进行分页查询
     * @param items
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPage(OrderItem...items){
        System.out.println("Default pageNo: " + pageNo + ", Default pageSize: " + pageSize);
        //1.分页条件
        Page<T> page = Page.of(pageNo, pageSize);
        //2.排序条件
        if (StringUtils.isNotBlank(sortBy)){
            //不为空
            page.addOrder(new OrderItem(sortBy,isAsc));
        }else if (items!= null){
            page.addOrder(items);
        }
        return page;
    }

    /**
     * 根据默认的排序条件进行分页查询
     * @param defaultSortBy
     * @param defaultIsAsc
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPageByDefaultSortBy(String defaultSortBy, Boolean defaultIsAsc){
        return toMpPage(new OrderItem(defaultSortBy,defaultIsAsc));
    }

    /**
     * 根据创建时间进行分页查询
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPageByDefaultCreateTime(){
        return toMpPage(new OrderItem("create_time",false));
    }

    /**
     * 根据创建时间进行分页查询
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPageByDefaultCreateTimeAsc(){
        return toMpPage();
    }

    /**
     * 根据更新时间进行分页查询
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPageByDefaultUpdateTime(){
        return toMpPage(new OrderItem("update_time",false));
    }
}
